From b6c71d1f4d16f377ac17251de706fa11ff225403 Mon Sep 17 00:00:00 2001 From: robertl Date: Wed, 22 Jun 2005 18:10:54 +0000 Subject: [PATCH] Olaf Klein contributes a new filter for merging and splitting tracks. --- gpsbabel/Makefile | 3 +- gpsbabel/README | 51 +++ gpsbabel/filter_vecs.c | 6 + gpsbabel/reference/track/trackfilter-new.gpx | 280 +++++++++++++++ gpsbabel/reference/track/trackfilter.gpx | 269 +++++++++++++++ gpsbabel/testo | 11 + gpsbabel/trackfilter.c | 345 +++++++++++++++++++ 7 files changed, 964 insertions(+), 1 deletion(-) create mode 100644 gpsbabel/reference/track/trackfilter-new.gpx create mode 100644 gpsbabel/reference/track/trackfilter.gpx create mode 100644 gpsbabel/trackfilter.c diff --git a/gpsbabel/Makefile b/gpsbabel/Makefile index f2a2847cd..1aee0130a 100644 --- a/gpsbabel/Makefile +++ b/gpsbabel/Makefile @@ -30,7 +30,7 @@ FMTS=magproto.o gpx.o geo.o mapsend.o mapsource.o garmin_tables.o \ vcf.o overlay.o kml.o google.o lowranceusr.o an1.o tomtom.o \ tef_xml.o maggeo.o pathaway.o vitosmt.o -FILTERS=position.o duplicate.o arcdist.o polygon.o smplrout.o reverse_route.o sort.o stackfilter.o +FILTERS=position.o duplicate.o arcdist.o polygon.o smplrout.o reverse_route.o sort.o stackfilter.o trackfilter.o OSJEEPS=jeeps/gpslibusb.o JEEPS=jeeps/gpsapp.o jeeps/gpscom.o \ @@ -223,6 +223,7 @@ tpg.o: tpg.c defs.h queue.h gbtypes.h jeeps/gpsmath.h jeeps/gps.h \ jeeps/gpsutil.h jeeps/gpsapp.h jeeps/gpsprot.h jeeps/gpscom.h \ jeeps/gpsfmt.h jeeps/gpsnmea.h jeeps/gpsmem.h jeeps/gpsrqst.h \ jeeps/gpsinput.h jeeps/gpsproj.h jeeps/gpsnmeafmt.h jeeps/gpsnmeaget.h +trackfilter.o: trackfilter.c defs.h queue.h gbtypes.h util.o: util.c defs.h queue.h gbtypes.h util_crc.o: util_crc.c uuid.o: uuid.c uuid.h diff --git a/gpsbabel/README b/gpsbabel/README index 5b4e45f34..d3c0101f1 100644 --- a/gpsbabel/README +++ b/gpsbabel/README @@ -1127,3 +1127,54 @@ DATA FILTERS -x stack,pop,append \ -o magellan -F fwaind.wpt + + TRACK + + The track filter is a tool for manipulating track lists. The + following options are available: + + TITLE + + Gives the new track(s) a basic title. Basic means if more + than one track is created by filter the title will be + expanded with the date the new track. Special formats (see + UNIX date or strftime for details) are possible. + + gpsbabel -t \ + -i gpx -f in.gpx \ + -x track,pack,split,title="ACTIVE LOG-%D" \ + -o gpx -F out.gpx PACK + + With this default option all tracks from input will be + packed into one track. If tracks overlaps in time, the + filter stops working. To pack all the tracks together + into one track and give it a name, use this: + + gpsbabel -t \ + -i gpx -f in.gpx \ + -x track,pack,title="ACTIVE LOG" \ + -o gpx -F out.gpx + + SPLIT + + The input track will be split into several tracks + depending on date of track points. If there is more + than one track, use the pack option before before + using this. + + To split a single tracks into separate tracks for each day + and name them, use this: + + gpsbabel -t \ + -i gpx -f in.gpx \ + -x track,split,title="ACTIVE LOG # %Y%m%d" \ + -o gpx -F out.gpx + + If the input has multiple tracks, pack them together before + splitting them back apart per day thusly: + + gpsbabel -t \ + -i gpx -f in.gpx \ + -x track,pack,split,title="ACTIVE LOG # %D" \ + -o gpx -F out.gpx + diff --git a/gpsbabel/filter_vecs.c b/gpsbabel/filter_vecs.c index 08b832f83..646f486e5 100644 --- a/gpsbabel/filter_vecs.c +++ b/gpsbabel/filter_vecs.c @@ -37,6 +37,7 @@ extern filter_vecs_t routesimple_vecs; extern filter_vecs_t reverse_route_vecs; extern filter_vecs_t sort_vecs; extern filter_vecs_t stackfilt_vecs; +extern filter_vecs_t trackfilter_vecs; static fl_vecs_t filter_vec_list[] = { @@ -85,6 +86,11 @@ fl_vecs_t filter_vec_list[] = { "stack", "Save and restore waypoint lists" }, + { + &trackfilter_vecs, + "track", + "Manipulate track lists" + }, { NULL, NULL, diff --git a/gpsbabel/reference/track/trackfilter-new.gpx b/gpsbabel/reference/track/trackfilter-new.gpx new file mode 100644 index 000000000..c65491629 --- /dev/null +++ b/gpsbabel/reference/track/trackfilter-new.gpx @@ -0,0 +1,280 @@ + + + + + LOG-20020525 + + + 1.000000 + + + + 0.000000 + + + + 0.000000 + + + + 0.000000 + + + + 0.000000 + + + + 0.000000 + + + + 0.000000 + + + + 0.000000 + + + + 0.000000 + + + + 0.000000 + + + + 0.000000 + + + + 0.000000 + + + + 0.000000 + + + + 0.000000 + + + + 0.000000 + + + + 2.000000 + + + + 0.000000 + + + + 1.000000 + + + + 0.000000 + + + + 0.000000 + + + + 0.000000 + + + + 0.000000 + + + + 2.000000 + + + + 1.000000 + + + + 1.000000 + + + + 0.000000 + + + + 2.000000 + + + + 0.000000 + + + + 0.000000 + + + + 0.000000 + + + + 0.000000 + + + + 0.000000 + + + + 6.000000 + + + + 2.000000 + + + + 0.000000 + + + + 0.000000 + + + + 0.000000 + + + + 0.000000 + + + + 1.000000 + + + + 0.000000 + + + + 0.000000 + + + + 6.000000 + + + + 0.000000 + + + + 0.000000 + + + + 0.000000 + + + + 0.000000 + + + + 0.000000 + + + + 0.000000 + + + + 0.000000 + + + + 0.000000 + + + + 0.000000 + + + + 0.000000 + + + + 0.000000 + + + + + + LOG-20020526 + + + 0.000000 + + + + 0.000000 + + + + 0.000000 + + + + 7.000000 + + + + 0.000000 + + + + + + LOG-20020527 + + + 0.000000 + + + + 0.000000 + + + + 0.000000 + + + + 0.000000 + + + + 0.000000 + + + + 0.000000 + + + + + diff --git a/gpsbabel/reference/track/trackfilter.gpx b/gpsbabel/reference/track/trackfilter.gpx new file mode 100644 index 000000000..88190adb9 --- /dev/null +++ b/gpsbabel/reference/track/trackfilter.gpx @@ -0,0 +1,269 @@ + + + + + + +1.000000 + + + +0.000000 + + + +0.000000 + + + +0.000000 + + + +0.000000 + + + +0.000000 + + + +0.000000 + + + +0.000000 + + + +0.000000 + + + +0.000000 + + + +0.000000 + + + +0.000000 + + + +0.000000 + + + +0.000000 + + + +0.000000 + + + +2.000000 + + + +0.000000 + + + +1.000000 + + + +0.000000 + + + +0.000000 + + + +0.000000 + + + +0.000000 + + + +2.000000 + + + +1.000000 + + + +1.000000 + + + +0.000000 + + + +2.000000 + + + +0.000000 + + + +0.000000 + + + +0.000000 + + + +0.000000 + + + +0.000000 + + + +6.000000 + + + +2.000000 + + + +0.000000 + + + +0.000000 + + + +0.000000 + + + +0.000000 + + + +1.000000 + + + +0.000000 + + + +0.000000 + + + +6.000000 + + + +0.000000 + + + +0.000000 + + + +0.000000 + + + +0.000000 + + + +0.000000 + + + +0.000000 + + + +0.000000 + + + +0.000000 + + + +0.000000 + + + +0.000000 + + + +0.000000 + + + +0.000000 + + + +0.000000 + + + +0.000000 + + + +7.000000 + + + +0.000000 + + + +0.000000 + + + +0.000000 + + + +0.000000 + + + +0.000000 + + + +0.000000 + + + +0.000000 + + + + + diff --git a/gpsbabel/testo b/gpsbabel/testo index bf4b2c8be..42937bd6d 100755 --- a/gpsbabel/testo +++ b/gpsbabel/testo @@ -716,4 +716,15 @@ compare ${TMPDIR}/vitosmt.gpx reference/vitosmt.gpx ${PNAME} -t -i vitosmt,tzoffset=-7 -f reference/vitosmt.smt -o gpx -F ${TMPDIR}/vitosmt_t.gpx compare ${TMPDIR}/vitosmt_t.gpx reference/track/vitosmt_t.gpx +# +# tracks filter tests +# + +rm -f ${TMPDIR}/trackfilter* + +${PNAME} -t -i gpx -f reference/track/trackfilter.gpx -x track,pack,split,title="LOG-%Y%m%d" -o gpx -F ${TMPDIR}/trackfilter-new.gpx +grep -v "